
export function debounce<T extends any[], R>(func: (...args: T) => R, wait: number): (...args: T) => void {
  let timeout: number | null = null; // 明确声明为number类型或null

  return function(this: any, ...args: T): void {
    // 保留上一次执行的上下文this和参数
    const context = this;

    // 如果有前一个计时器，则清除它
    if (timeout !== null) {
      clearTimeout(timeout);
    }

    // 设置新的计时器
    timeout = setTimeout(() => {
      func.apply(context, args); // 调用传入的函数，并保留其this上下文和参数
    }, wait);
  };
}